#ifndef LAN_H_
#define LAN_H_

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <memory.h>
#include <unistd.h>
#include <errno.h>
#include <netdb.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <sys/types.h>
#include<netinet/tcp.h>
#include <sys/wait.h>
#include "../../Global_Define.h"
#include "../POSIX_Time/POSIX_Time.h"
#include <net/route.h>		//< Shike20210327 其中有网关结构体定义
typedef enum {
	UDP_SEND_STATUS,
	UDP_RECV_STATUS,
	UDP_SEND_RECV_STATUS,
}UDP_WORK_STATUS_e;

void Addr_Set(struct sockaddr_in* addr, uint16_t port, in_addr_t IP);											//< 绑定套接字到指定IP地址及端口
bool GetLocal_IP(const char* Net_Card_Name, char* IPAddr);														//< 获取指定网卡IP地址函数
bool SetLocal_IP(const char* Net_Card_Name, char* IPAddr);														//< 设置指定网卡IP地址函数
bool SetLocal_Route(const char* Net_Card_Name, char *szGateWay);
unsigned char IPTail_Num_Get(char* IPAddr);																		//< IP地址末位获取
bool TCP_Sever_Init(int* sock, uint16_t port, int val, const char* ServerIPAddr);								//< TCP通讯服务器端初始化
bool TCP_Sever_Accept(int* sock, int* sock_accept, int Timeout_S);												//< TCP通讯服务器端接受连接请求
bool TCP_Client_Init(int* sock, int val);																		//< TCP通讯客户端初始化
bool TCP_Client_Connect(int* sock, uint16_t port, const char* IPAddr, int Timeout_S);							//< TCP通讯客户端连接指定地址
int TCP_Recv(int* sock_accept, void* buf, int len, unsigned int timeout_ms);									//< TCP通讯接收数据函数
int TCP_Send(int* sock, void* buf, int len, unsigned int timeout_ms);											//< TCP通讯发送数据函数
bool Connect_Status_Judge(int sock);																			//< TCP/IP通讯连接状态判断
bool UDP_Init(int* sock, uint16_t port, int val, int timeout_ms, UDP_WORK_STATUS_e status,const char* ServerIPAddr);		                //< UDP通讯初始化
int UDP_Send(int* sock, struct sockaddr_in* To, void* buf, int len);											//< UDP通讯发送数据函数
int UDP_Recv_Fixed_Bytes(int* sock, void* buf, int len);														//< UDP通讯接收固定字节数据函数
int UDP_Recv_Any_Bytes(int* sock, void* buf, int len);															//< UDP通讯接收任意字节数据函数
void Calcu_IP(char* IP, UDP_WORK_STATUS_e status);                                                        ////< 通讯IP计算 
#endif
